import dayjs from 'dayjs';

/**
 * 获取指定日期所在周的周一
 * @param {dayjs.Dayjs} date - dayjs日期对象
 * @returns {dayjs.Dayjs} 该周的周一
 */
export function getMondayOfWeek(date) {
	const day = date.day(); // dayjs中周日为0，周一为1，...，周六为6
	// 如果是周日(0)，需要减去6天得到周一；其他情况减去(day-1)天
	return day === 0 ? date.subtract(6, 'day') : date.subtract(day - 1, 'day');
}

/**
 * 获取从指定日期开始的连续n天日期
 * @param {dayjs.Dayjs} startDate - 开始日期
 * @param {number} days - 天数
 * @returns {string[]} 格式化后的日期数组
 */
export function getConsecutiveDays(startDate, days) {
	return Array.from({
			length: days
		}, (_, i) =>
		startDate.add(i, 'day').format('YYYY-MM-DD')
	);
}

export function getThisWeekDates() {
	// 获取本周日期范围（周一至周日）
	const today = dayjs();
	const thisWeekMonday = getMondayOfWeek(today).startOf('day'); // 重置时间为00:00:00
	const thisWeekDates = getConsecutiveDays(thisWeekMonday, 7);
	return thisWeekDates;
}

export function getNextWeekDates() {
	// 获取下周日期范围（周一至周日）
	const today = dayjs();
	const thisWeekMonday = getMondayOfWeek(today).startOf('day'); //
	const nextWeekMonday = thisWeekMonday.add(7, 'day');
	const nextWeekDates = getConsecutiveDays(nextWeekMonday, 7);
	return nextWeekDates;
}




export function getDateByWeekday(targetWeekday, format = 'YYYY-MM-DD') {
	const today = dayjs();
	const todayWeekday = today.day(); // 今天的星期几（0=周日，1=周一...6=周六）

	// 统一转换目标星期几为 0-6 格式（0=周日）
	const normalizedTarget = targetWeekday === 7 ? 0 : targetWeekday;

	let targetDate;
	// 计算本周内的目标星期几（如今天是周三，想获取本周一：1 - 3 = -2天）
	const offset = normalizedTarget - todayWeekday;
	targetDate = today.add(offset, 'day');

	// 重置时间为 00:00:00
	targetDate = targetDate.startOf('day');

	return format ? targetDate.format(format) : targetDate;
}


// 示例用法（假设今天是 2025-09-24，周三，today.day() 返回 3）
// console.log('本周五（5）:', getDateByWeekday(5, 'YYYY-MM-DD')); // 2025-09-26
// console.log('本周日（7或0）:', getDateByWeekday(7, 'YYYY-MM-DD')); // 2025-09-28